package com.kk.demo.java8.lambda.base03;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.BooleanSupplier;
import java.util.function.Consumer;
import java.util.function.IntFunction;
import java.util.function.IntSupplier;
import java.util.function.Predicate;

/**
 * 方法引用测试
 * @author liujun
 * @date 2016年8月27日
 * @verion 0.0.1
 */
public class FunctionReference {

    public FunctionReference() {
    }

    public static void main(String[] args) {
        sortReference();
        constains();
        newObject();
    }

    /**
     * 排序对象引用测试
     */
    public static void sortReference() {
        System.out.println("进行静态的排序方法调用");
        // 静态方法引用
        int[] arrayA = new int[] { 10, 9, 7, 7, 2 };

        // 测试排序方法引用
        Consumer<int[]> arrb = Arrays::sort;

        System.out.println(Arrays.toString(arrayA));

        arrb.accept(arrayA);

        System.out.println(Arrays.toString(arrayA));
    }

    /**
     * 方法引用测试
     */
    public static void constains() {
        System.out.println("进行实例方法的调用");
        ArrayList<Integer> arrayB = new ArrayList<Integer>(10);
        arrayB.add(10);
        arrayB.add(8);
        arrayB.add(19);
        arrayB.add(18);
        arrayB.add(12);

        // 获得集体arrayB的长度
        IntSupplier source = arrayB::size;
        System.out.println("集合长度:" + source.getAsInt());
        // 获得集体arrayB是否为空
        BooleanSupplier isEmpty = arrayB::isEmpty;
        System.out.println("是否为空:" + isEmpty.getAsBoolean());
        // 检查集合中是否包含元素
        Predicate<Integer> conCheck = arrayB::contains;
        System.out.println("是否包含 :" + conCheck.test(10));
    }

    /**
     * 进行对象的创建 
     */
    public static void newObject() {
        // 创建一个int类型的数组
        IntFunction<int[]> intInstance = int[]::new;
        int[] value = intInstance.apply(10);

        System.out.println("打印创建的数组信息");
        System.out.println(Arrays.toString(value));

        // 单对象构造
        IntFunction<Integer> intObject = Integer::new;

        int newInt2 = intObject.apply(10);

        System.out.println("通过Integer创建构建的一个对象:" + newInt2);

    }
}
